This demo is an entirely automated report – all charts and tables, as well as all figures within the text have been generated from the data, with no manual input. This report makes use of the outputs generated by 5W_cleaning.Rmd, which automates the cleaning of 5W data. The 5W data used has had partner information removed.
Summary of beneficiaries by activity, with sex ratio
| DISTRIBUCION DE KITS DE MATERIALES ESCOLARES |
471,568 |
44.01 |
232,197 |
239,372 |
0.97 |
| ALIMENTACION ESCOLAR |
156,926 |
14.64 |
72,139 |
84,787 |
0.85 |
| PROMOCION MENSAJES CLAVES PARA LA COMUNIDAD ESCOLAR |
144,775 |
13.51 |
64,029 |
80,502 |
0.8 |
| EDUCACION A DISTANCIA |
132,258 |
12.34 |
64,240 |
68,018 |
0.94 |
| APOYO PSICOEDUCATIVO PARA NNA |
120,887 |
11.28 |
54,859 |
66,028 |
0.83 |
| FORMACION DOCENTE Y OTRO PERSONAL EDUCATIVO |
17,238 |
1.61 |
3,470 |
13,224 |
0.26 |
| ACTIVIDADES CON ADOLESCENTES Y JOVENES DE NIVELACION, HABILIDADES PARA LA VIDA Y CAPACITACION TECNICA |
14,016 |
1.31 |
6,336 |
7,680 |
0.82 |
| BECAS Y OTROS INCENTIVOS PARA DOCENTES Y PERSONAL |
5,744 |
0.54 |
1,572 |
4,172 |
0.38 |
| ACTIVIDADES RECREATIVAS |
4,317 |
0.4 |
1,998 |
2,319 |
0.86 |
| INICIATIVAS PARA REINSERCION EDUCATIVA DE NNA FUERA DE LA ESCUELA |
3,869 |
0.36 |
2,114 |
1,755 |
1.2 |
A total of 728,408 individuals have been reached to date. In terms of frequencies (inclusive of double counting), 1,071,598 have been reached.
Additionally, the 4,746,671 beneficiary frequencies reached by the activity PROMOCION MENSAJES CLAVES PARA LA COMUNIDAD ESCOLAR have been removed from the totals in this report as the activity consists of solely radio messaging.
Beneficiaries by age
unique beneficiaries or individuals

Beneficiaries by age compared to 2017 Enrollment
With reference to the 2017 Matricula dataset, we can see that the Education programme has reached an overall average of 9% of schoolgoing children aged 3-17 nationwide. Children aged 3-17 consitute 88% of all UNICEF beneficiaries.
| 3-6 |
121,169 |
1,438,475 |
8.423 |
| 7-12 |
352,808 |
3,252,505 |
10.85 |
| 12-17 |
169,771 |
2,205,724 |
7.697 |
Changes since previous month
The number of individuals reached has increased by 175,005 in the past month, reaching a total of 728,408. The number of beneficiary frequencies reached has increased by 222,618 in the same period, reaching a total of 1,071,598.

Progress by activity by month
mouse over to see details
Progress in recent months has largely been due to the distribution of education kits and distance learning.
Summaries by geography
Beneficiaries by state

Number of Schools by State
A total of 2,229 schools have been reached by UNICEF; 44% are from Miranda and Zulia alone.

Scatterplot of Municipalities
logarithmic scale; larger points indicate more beneficiaries reached, darker blues indicate more activity types
mouse over municipalities to see beneficiaries and distinct activities
A total of 110 municipalities were reached by the UNICEF Education programme.
Top 10 municipalities by reach and coverage
by beneficiaries
|
estado
|
municipio
|
beneficiarios
|
|
DISTRITO CAPITAL
|
LIBERTADOR
|
80482
|
|
MIRANDA
|
SUCRE
|
59176
|
|
ZULIA
|
MARACAIBO
|
55370
|
|
BOLIVAR
|
CARONI
|
37908
|
|
ZULIA
|
SAN FRANCISCO
|
29369
|
|
AMAZONAS
|
ATURES
|
22430
|
|
LARA
|
IRIBARREN
|
21977
|
|
BOLIVAR
|
HERES
|
18293
|
|
DELTA AMACURO
|
TUCUPITA
|
17953
|
|
BOLIVAR
|
CEDENO
|
15681
|
by coverage
|
estado
|
municipio
|
coverage_percent
|
|
TACHIRA
|
FERNANDEZ FEO
|
87
|
|
TACHIRA
|
AYACUCHO
|
79
|
|
ZULIA
|
MACHIQUES DE PERIJA
|
79
|
|
AMAZONAS
|
AUTONOMO AUTANA
|
76
|
|
TACHIRA
|
SAMUEL DARIO MALDONADO
|
75
|
|
TACHIRA
|
PANAMERICANO
|
72
|
|
MIRANDA
|
PLAZA
|
68
|
|
TACHIRA
|
INDEPENDENCIA
|
68
|
|
TACHIRA
|
JUNIN
|
65
|
|
MIRANDA
|
EL HATILLO
|
64
|
Together, the 10 municipalities with the highest reach (above left) form 49% of the 728,400 beneficiaries reached. The average coverage of the school-age population in the municipalities where UNICEF is present is 20%. Coverage refers to the percentage of enrolled children (aged 3-17 years) reached by UNICEF.
Histogram of Coverage
Below is a histogram of munciipalities where UNICEF is present showing the coverage of enrolled children (aged 3-17). Of note, we have reached 10% or less of the population in 55 out of the 110 in which we operate. This is in addition to the 226 where no UNICEF Education activities have occurred.

Reports about Partners
Number of different activities implemented by each partner
| partner |
SOCIO 2 |
SOCIO 1 |
SOCIO 4 |
SOCIO 5 |
UNICEF |
SOCIO 3 |
SOCIO 6 |
SOCIO 7 |
SOCIO 10 |
SOCIO 8 |
| num_activities |
9 |
8 |
8 |
6 |
6 |
4 |
2 |
2 |
1 |
1 |
Partners’ progress over time
mouse over for details
Summary table about partners’ achievements
| UNICEF |
354,041 |
33.04 |
168,297 |
185,745 |
0.91 |
74 |
| SOCIO 1 |
203,084 |
18.95 |
100,495 |
102,589 |
0.98 |
92 |
| SOCIO 2 |
200,306 |
18.69 |
87,029 |
113,033 |
0.77 |
51 |
| SOCIO 4 |
131,612 |
12.28 |
63,964 |
67,648 |
0.95 |
17 |
| SOCIO 5 |
115,840 |
10.81 |
50,906 |
64,934 |
0.78 |
10 |
| SOCIO 7 |
31,554 |
2.94 |
14,819 |
16,735 |
0.89 |
10 |
| SOCIO 8 |
29,471 |
2.75 |
15,379 |
14,092 |
1.09 |
17 |
| SOCIO 3 |
2,657 |
0.25 |
909 |
1,748 |
0.52 |
3 |
| SOCIO 10 |
2,461 |
0.23 |
1,151 |
1,310 |
0.88 |
1 |
| SOCIO 6 |
572 |
0.05 |
5 |
23 |
0.22 |
7 |
Maps and reference table
Maps at municipal level

Reference table - municipal level
use UNICEF_present to filter to municipalities where the Education programme operates
CA01.05 Promocion de mensajes claves para la comunidad escolar is not included
LS0tDQp0aXRsZTogIlJlcG9ydCBvbiBFZHVjYXRpb24gNVcgZGF0YSAtLSBWZW5lenVlbGEiDQphdXRob3I6ICJTZWFuIE5nIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQ9JyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSAxMCkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShmb3JjYXRzKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGdnbWFwKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShtYXB0b29scykNCmxpYnJhcnkoZ2dmb3JjZSkNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHRpbnl0ZXgpDQpsaWJyYXJ5KHdlYnNob3QpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIE1BS0UgU1VSRSBZT1UgUkVBRCBJTiBUSEUgUklHSFQgRklMRSAtLSBDSEVDSyBUSU1FU1RBTVANCmFjdF9iZW4gPC0gcmVhZF9jc3YoIjIxMTEwOF8wMTEzX2FjdF9iZW4uY3N2IikgDQp1X2JlbiA8LSByZWFkX2NzdigiMjExMTA4XzAxMTNfdV9iZW4uY3N2IikgDQoNCiMgc3VtKGFjdF9iZW4kYmVuZWZpY2lhcmlvcykNCiMgc3VtKHVfYmVuJGJlbmVmaWNpYXJpb3MpDQoNCiMgY2Vuc3VzIHJlZmVyZW5jZSBkYXRhc2V0cw0KY2VuX3JlZiA8LSByZWFkX2V4Y2VsKCJjZW5zdXNfZGF0YV8yMDE5MTEyMi54bHN4Iiwgc2hlZXQgPSAiZGF0YSIpICU+JSANCiAgY2xlYW5fbmFtZXMoKSAlPiUNCiAgc2VsZWN0KGVzdGFkbywgcGNvZGUxLCBtdW5pY2lwaW8sIHBjb2RlMiwgcGFycm9xdWlhLCBwY29kZTMsIGZpZWxkX29mZmljZSwNCiAgICAgICAgIHBvYmxhY2lvbl90b3RhbF8yMDExLCB4XzIwMTlfcG9ibGFjaW9uX3BhcnJvcXVpYWxfdG90YWwsDQogICAgICAgICBoYW1fMjAxOV9hbWJpdG9zX2dlLCBoYW1fMjAxOV94eF9wb2JyZXphX2Vudl9wb3JfcGFycm9xdWlhLCANCiAgICAgICAgIGhhbV8yMDE5X3h4X3BvYmxhY2lvbl9wb2JyZV9wb3JfcGFycm9xdWlhLA0KICAgICAgICAgcG9ibGFjaW9uX2luZmFudGlsX21lbm9yX2RlXzEyX2Fub3MsIHBvYmxhY2lvbl9hZG9sZXNjZW50ZXNfZGVfMTJfYV8xN19hbm9zLA0KICAgICAgICAgcG9ibGFjaW9uX2RlXzE4X2Fub3NfeV9tYXMsIA0KICAgICAgICAgcG9ibGFjaW9uX3VyYmFuYV9wZXJjZW50LCBhcmVhX2ttMiwgZGVuc2lkYWRfcG9ibGFjaW9uYWxfcHBsX2ttMiwNCiAgICAgICAgIG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9pbmljaWFsLCBtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25fcHJpbWFyaWEsIA0KICAgICAgICAgbWF0cmljdWxhXzIwMTdfZWR1Y2FjaW9uX21lZGlhKQ0KDQojIGZpbHRlcmluZyBvdXQgUFJPTU9DSU9OIE1FTlNBSkVTIENMQVZFUyBQQVJBIExBIENPTVVOSURBRCBFU0NPTEFSDQpDQTEwNSA8LSBhY3RfYmVuICU+JSBmaWx0ZXIoYWN0aXZpZGFkX2NvZGlnbyA9PSAiQ0ExLjA1IikNCg0KIyBjcmVhdGluZyBkYXRhc2V0cyB3aXRob3V0IENBMS4wNSBhbmQNCiMgZm9yIGFjdF9iZW4sIHJlY29kaW5nIFVOSUNFRiBhbmQgbXV0YXRpbmcgc2hvcnQgYWN0aXZpdHkgZGVzY3JpcHRpb25zDQphY3RfYmVuMiA8LSBhY3RfYmVuICU+JSANCiAgZmlsdGVyKCFzdHJfZGV0ZWN0KC4kdWJpY2FjaW9uLCAiXlJBRElPIikpICU+JSANCiAgbXV0YXRlKG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSA9IA0KICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwob3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklDRUYgLSBGb25kbyBkZSBsYXMgTmFjaW9uZXMgVW5pZGFzIHBhcmEgbGEgSW5mYW5jaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOSUNFRiIpKSAlPiUgDQogIG11dGF0ZShhY3RpdmlkYWRfc2hvcnQgPSByZWNvZGUoYWN0aXZpZGFkX2NvZGlnbywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wMSA9ICIxLjAxX3JlaW5zZXJjaW9uIGVkdWNhdGl2YSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wMiA9ICIxLjAyX25pdmVsYWNpb24geSBjYXBhY2l0YWNpb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTEuMDMgPSAiMS4wM19raXRzIGVzY29sYXJlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wNCA9ICIxLjA0X2FsaW1lbnRhY2lvbiBlc2NvbGFyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ExLjA1ID0gIjEuMDVfcHJvbW9jaW9uIG1lbnNhamVzIGNsYXZlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wNiA9ICIxLjA2X2Fwb3lvIHBzaWNvZWR1Y2F0aXZvIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ExLjA3ID0gIjEuMDdfYWN0aXZpZGFkZXMgcmVjcmVhdGl2YXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTIuMDggPSAiMi4wOF9lZHVjYWNpb24gYSBkaXN0YW5jaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTIuMDkgPSAiMi4wOV9mb3JtYWNpb24gZG9jZW50ZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTIuMTAgPSAiMi4xMF9iZWNhcyBkb2NlbnRlcyIpKQ0KICAgICAgICAgICAgICAgICAgICANCnVfYmVuMiA8LSB1X2JlbiAlPiUgZmlsdGVyKCFzdHJfZGV0ZWN0KC4kdWJpY2FjaW9uLCAiXlJBRElPIikpDQoNCg0KDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KPiBUaGlzIGRlbW8gaXMgYW4gZW50aXJlbHkgYXV0b21hdGVkIHJlcG9ydCAtLSBhbGwgY2hhcnRzIGFuZCB0YWJsZXMsIGFzIHdlbGwgYXMgYWxsIGZpZ3VyZXMgd2l0aGluIHRoZSB0ZXh0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgZnJvbSB0aGUgZGF0YSwgd2l0aCBubyBtYW51YWwgaW5wdXQuIFRoaXMgcmVwb3J0IG1ha2VzIHVzZSBvZiB0aGUgb3V0cHV0cyBnZW5lcmF0ZWQgYnkgYDVXX2NsZWFuaW5nLlJtZGAsIHdoaWNoIGF1dG9tYXRlcyB0aGUgY2xlYW5pbmcgb2YgNVcgZGF0YS4gVGhlIDVXIGRhdGEgdXNlZCBoYXMgaGFkIHBhcnRuZXIgaW5mb3JtYXRpb24gcmVtb3ZlZC4gDQoNCiZuYnNwOyANCg0KIyBTdW1tYXJ5IG9mIGJlbmVmaWNpYXJpZXMgYnkgYWN0aXZpdHksIHdpdGggc2V4IHJhdGlvIA0KDQpgYGB7ciwgc3VtbWFyeSBUQUJMRSAtLSBhY3Rpdml0eSBhbmQgc2V4fQ0KDQojIGFzIGEgbm90ZSwgaSBkb24ndCB0aGluayB5b3UgY2FuIHB1dCBhbiBzdHJfZGV0ZWN0IGluc2lkZSBhIHN1bW1hcmlzZQ0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCnN1bW1hcnlfYWN0IDwtIGFjdF9iZW4yICU+JSANCiAgbXV0YXRlKHNleF9iZW4gPSBpZmVsc2Uoc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCAiXm0iKSwgIm1hbGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uoc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCAiXmYiKSwgImZlbWFsZSIsICJub19lc3AiKSkpICU+JSANCiAgbXV0YXRlKGFjdGl2aWRhZCA9IGFjdGl2aWRhZF9kZXNjKSAlPiUgDQogIGdyb3VwX2J5KGFjdGl2aWRhZCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVuZWZpY2lhcmlvcywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAibWFsZSJdKSksDQogICAgICAgICAgICBmZW1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAiZmVtYWxlIl0pKSwNCiAgICAgICAgICAgIHNleF9yYXRpbyA9IHJvdW5kKChtYWxlL2ZlbWFsZSksIGRpZ2l0cyA9IDIpKSAlPiUgDQogIG11dGF0ZShwZXJjZW50X29mX3RvdGFsID0gcm91bmQoKHRvdGFsIC8gc3VtKHRvdGFsKSAqIDEwMCksIGRpZ2l0cyA9IDIpKSAlPiUgDQogIHJlbG9jYXRlKHBlcmNlbnRfb2ZfdG90YWwsIC5hZnRlciA9IHRvdGFsKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh0b3RhbCkpDQoNCnBhbmRlcihzdW1tYXJ5X2FjdCwgYmlnLm1hcmsgPSAiLCIsIHN0eWxlID0gInJtYXJrZG93biIpDQoNCg0KYGBgDQoNCg0KDQo+IEEgdG90YWwgb2YgX19gciBmb3JtYXQocm91bmQoc3VtKHVfYmVuMiRiZW5lZmljaWFyaW9zKSksIGJpZy5tYXJrID0gIiwiKWBfXyBpbmRpdmlkdWFscyBoYXZlIGJlZW4gcmVhY2hlZCB0byBkYXRlLiBJbiB0ZXJtcyBvZiBmcmVxdWVuY2llcyAoaW5jbHVzaXZlIG9mIGRvdWJsZSBjb3VudGluZyksIF9fYHIgZm9ybWF0KHN1bShhY3RfYmVuMiRiZW5lZmljaWFyaW9zKSwgYmlnLm1hcmsgPSAiLCIpYF9fIGhhdmUgYmVlbiByZWFjaGVkLiANCg0KPiBBZGRpdGlvbmFsbHksIHRoZSBfX2ByIGZvcm1hdChzdW0oQ0ExMDUkYmVuZWZpY2lhcmlvcyksIGJpZy5tYXJrID0gIiwiKWBfXyBiZW5lZmljaWFyeSBmcmVxdWVuY2llcyByZWFjaGVkIGJ5IHRoZSBhY3Rpdml0eSBQUk9NT0NJT04gTUVOU0FKRVMgQ0xBVkVTIFBBUkEgTEEgQ09NVU5JREFEIEVTQ09MQVIgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdG90YWxzIGluIHRoaXMgcmVwb3J0IGFzIHRoZSBhY3Rpdml0eSBjb25zaXN0cyBvZiBzb2xlbHkgcmFkaW8gbWVzc2FnaW5nLiANCg0KJm5ic3A7DQombmJzcDsNCg0KIyBCZW5lZmljaWFyaWVzIGJ5IGFnZQ0KKnVuaXF1ZSBiZW5lZmljaWFyaWVzIG9yIGluZGl2aWR1YWxzKg0KDQpgYGB7ciwgYmVuZWZpY2lhcmllcyBieSBhZ2UgUExPVH0NCm9yZHZlYyA8LSBjKCIwLTMiLCAiMy02IiwgIjctMTIiLCAiMTItMTciLCAiMTgtMTkiLCAibWF5b3JfcXVlXzE5IikNCg0KYWdlX3VfYmVuIDwtIHVfYmVuMiAlPiUgIyBpbXBvcnRhbnQgdG8gdXNlIHVfYmVuIGhlcmUgDQogIG11dGF0ZShhZ2VfYmVuID0gY2FzZV93aGVuKA0KICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwiMF8zJCIpIH4gIjAtMyIsDQogICAgc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCIzXzYkIikgfiAiMy02IiwNCiAgICBzdHJfZGV0ZWN0KGRlc2FncmVnYWNpb24sICI3XzEyJCIpIH4gIjctMTIiLCANCiAgICBzdHJfZGV0ZWN0KGRlc2FncmVnYWNpb24sICIxMl8xNyQiKSB+ICIxMi0xNyIsDQogICAgc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCAiMThfMTkkIikgfiAiMTgtMTkiLA0KICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwgIm1heW9yZXNfZGVfMTkkIikgfiAibWF5b3JfcXVlXzE5IiwgDQogICAgVFJVRSB+ICJub19lc3AiKSkgJT4lDQogIGZpbHRlcihhZ2VfYmVuICE9ICJub19lc3AiKSAlPiUgDQogIGdyb3VwX2J5KGFnZV9iZW4pICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpb3MgPSBzdW0oYmVuZWZpY2lhcmlvcykpDQoNCmdncGxvdChkYXRhID0gYWdlX3VfYmVuLCBhZXMoeCA9IGZjdF9yZW9yZGVyKGFnZV9iZW4sIG9yZHZlYyksIHkgPSBiZW5lZmljaWFyaW9zKSkgKw0KICBnZW9tX2NvbChmaWxsID0gImNvcm5mbG93ZXJibHVlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpjb21tYShiZW5lZmljaWFyaW9zKSksIHZqdXN0ID0gLTAuMjUsIHNpemUgPSA0KSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSB1bml0X2Zvcm1hdCh1bml0ID0gIksiLCBzY2FsZSA9IDFlLTMsIHNlcCA9ICIiKSkgKw0KICB4bGFiKCJHcnVwb3MgcG9yIEVkYWQiKSArIHlsYWIoIkJlbmVmaWNpYXJpb3MiKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApKQ0KDQpgYGANCg0KJm5ic3A7DQoNCiMjIEJlbmVmaWNpYXJpZXMgYnkgYWdlIGNvbXBhcmVkIHRvIDIwMTcgRW5yb2xsbWVudA0KDQpgYGB7ciBSRUYgbWF0cmljIGJlbiB9DQptYXRyaWNfYmVuIDwtIGNlbl9yZWYgJT4lIA0KICBzZWxlY3QobWF0cmljdWxhXzIwMTdfZWR1Y2FjaW9uX2luaWNpYWwsIG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9wcmltYXJpYSwgDQogICAgICAgICBtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25fbWVkaWEpICU+JQ0KICByZW5hbWUoIjMtNiIgPSBtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25faW5pY2lhbCwNCiAgICAgICAgICI3LTEyIiA9IG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9wcmltYXJpYSwNCiAgICAgICAgICIxMi0xNyIgPSBtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25fbWVkaWEpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAiYWdlX2JlbiIsIHZhbHVlc190byA9ICJtYXRyaWN1bGEyMDE3IiwgDQogICAgICAgICAgICAgICB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUpICU+JSANCiAgZ3JvdXBfYnkoYWdlX2JlbikgJT4lIA0KICBzdW1tYXJpc2UobWF0cmljdWxhMjAxNyA9IHN1bShtYXRyaWN1bGEyMDE3KSkgJT4lDQogIGxlZnRfam9pbihhZ2VfdV9iZW4pICU+JSANCiAgbXV0YXRlKHBlcmNlbnRfdG90YWwgPSBiZW5lZmljaWFyaW9zL21hdHJpY3VsYTIwMTcgKiAxMDApICU+JSANCiAgcmVsb2NhdGUoYmVuZWZpY2lhcmlvcywgLmFmdGVyID0gYWdlX2JlbikgJT4lIA0KICByZW5hbWUoYEVkYWQgZ3J1cG9gID0gYWdlX2JlbikgJT4lIA0KICBzbGljZSgyLDMsMSkgICMgcmVhcnJhbmdpbmcgcm93cw0KICANCmBgYA0KDQo+IFdpdGggcmVmZXJlbmNlIHRvIHRoZSAyMDE3IE1hdHJpY3VsYSBkYXRhc2V0LCB3ZSBjYW4gc2VlIHRoYXQgdGhlIEVkdWNhdGlvbiBwcm9ncmFtbWUgaGFzIHJlYWNoZWQgYW4gb3ZlcmFsbCBhdmVyYWdlIG9mIF9fYHIgcm91bmQoc3VtKG1hdHJpY19iZW4kYmVuZWZpY2lhcmlvcykvKHN1bShtYXRyaWNfYmVuJG1hdHJpY3VsYTIwMTcpKSoxMDApYCVfXyBvZiBzY2hvb2xnb2luZyBjaGlsZHJlbiBhZ2VkIDMtMTcgbmF0aW9ud2lkZS4gQ2hpbGRyZW4gYWdlZCAzLTE3IGNvbnNpdHV0ZSBfX2ByIHJvdW5kKHN1bShtYXRyaWNfYmVuJGJlbmVmaWNpYXJpb3MpLyhzdW0odV9iZW4yJGJlbmVmaWNpYXJpb3MpKSoxMDApYCVfXyBvZiBhbGwgVU5JQ0VGIGJlbmVmaWNpYXJpZXMuIA0KDQpgYGB7ciBUQUJMRSBtYXRyaWMgYmVufQ0KDQpwYW5kZXIobWF0cmljX2JlbiwgYmlnLm1hcmsgPSAiLCIsIHN0eWxlID0gInJtYXJrZG93biIpDQoNCmBgYA0KDQoNCiZuYnNwOw0KJm5ic3A7DQoNCiMgQ2hhbmdlcyBzaW5jZSBwcmV2aW91cyBtb250aA0KDQpgYGB7ciBSRUYgY3VtdWxhdGl2ZSBkYXRhc2V0c30NCmN1bV91X2JlbiA8LSB1X2JlbjIgJT4lIA0KICBtdXRhdGUobWVzX3NvbG8gPSBhcy5EYXRlKG1lc19zb2xvKSkgJT4lIA0KICBhcnJhbmdlKG1lc19zb2xvKSAlPiUgDQogIGdyb3VwX2J5KG1lc19zb2xvKSAlPiUgDQogIHN1bW1hcmlzZShzdW1fYmVuID0gc3VtKGJlbmVmaWNpYXJpb3MpKSAlPiUgDQogIG11dGF0ZShjdW11bGF0aXZlID0gY3Vtc3VtKHN1bV9iZW4pKQ0KDQpjdW1fYWN0X2JlbiA8LSBhY3RfYmVuMiAlPiUgDQogIG11dGF0ZShtZXNfc29sbyA9IGFzLkRhdGUobWVzX3NvbG8pKSAlPiUgDQogIGFycmFuZ2UobWVzX3NvbG8pICU+JSANCiAgZ3JvdXBfYnkobWVzX3NvbG8pICU+JSANCiAgc3VtbWFyaXNlKHN1bV9iZW4gPSBzdW0oYmVuZWZpY2lhcmlvcykpICU+JSANCiAgbXV0YXRlKGN1bXVsYXRpdmUgPSBjdW1zdW0oc3VtX2JlbikpDQoNCmBgYA0KDQo+IFRoZSBudW1iZXIgb2YgaW5kaXZpZHVhbHMgcmVhY2hlZCBoYXMgaW5jcmVhc2VkIGJ5IF9fYHIgZm9ybWF0KGN1bV91X2JlblsxMSwzXSAtIGN1bV91X2JlblsxMCwzXSwgYmlnLm1hcmsgPSAiLCIpYF9fIGluIHRoZSBwYXN0IG1vbnRoLCByZWFjaGluZyBhIHRvdGFsIG9mIF9fYHIgZm9ybWF0KHJvdW5kKHN1bSh1X2JlbjIkYmVuZWZpY2lhcmlvcykpLCBiaWcubWFyayA9ICIsIilgX18uIFRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcnkgZnJlcXVlbmNpZXMgcmVhY2hlZCBoYXMgaW5jcmVhc2VkIGJ5IF9fYHIgZm9ybWF0KGN1bV9hY3RfYmVuWzExLDNdIC0gY3VtX2FjdF9iZW5bMTAsM10sIGJpZy5tYXJrID0gIiwiKWBfXyBpbiB0aGUgc2FtZSBwZXJpb2QsIHJlYWNoaW5nIGEgdG90YWwgb2YgX19gciBmb3JtYXQoc3VtKGN1bV9hY3RfYmVuWzExLDNdKSwgYmlnLm1hcmsgPSAiLCIpYF9fLg0KDQpgYGB7ciAgY3VtdWxhdGl2ZSBiZW5lZmljaWFyaWVzIGxpbmUgUExPVH0NCnVfYmVuMiAlPiUgDQogIG11dGF0ZShtZXNfc29sbyA9IGFzLkRhdGUobWVzX3NvbG8pKSAlPiUgDQogIGFycmFuZ2UobWVzX3NvbG8pICU+JSANCiAgZ3JvdXBfYnkobWVzX3NvbG8pICU+JSANCiAgc3VtbWFyaXNlKHN1bV9iZW4gPSBzdW0oYmVuZWZpY2lhcmlvcykpICU+JSANCiAgbXV0YXRlKGN1bXVsYXRpdmUgPSBjdW1zdW0oc3VtX2JlbikpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbWVzX3NvbG8sIHkgPSBjdW11bGF0aXZlKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OmNvbW1hKGN1bXVsYXRpdmUpKSwgdmp1c3QgPSAtMC4yNSwgaGp1c3QgPSAxLCBzaXplID0gMykgKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWItJVkiLCBkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjp1bml0X2Zvcm1hdCh1bml0ID0gIksiLCBzY2FsZSA9IDFlLTMsIHNlcCA9ICIiKSwNCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgwLDk1MDAwMCwgYnkgPSAyMDAwMDApKSArICMgd2hhdCBpcyB0aGlzIGJyZWFrcyBkb2luZz8NCiAgeGxhYigiTWVzIFJlcG9ydGFkbyIpICsgeWxhYigiQmVuZWZpY2lhcmlvcyAoY3VtdWxhdGl2bykiKQ0KYGBgDQoNCiZuYnNwOw0KDQojIyBQcm9ncmVzcyBieSBhY3Rpdml0eSBieSBtb250aA0KKm1vdXNlIG92ZXIgdG8gc2VlIGRldGFpbHMqDQoNCj4gUHJvZ3Jlc3MgaW4gcmVjZW50IG1vbnRocyBoYXMgbGFyZ2VseSBiZWVuIGR1ZSB0byB0aGUgZGlzdHJpYnV0aW9uIG9mIGVkdWNhdGlvbiBraXRzIGFuZCBkaXN0YW5jZSBsZWFybmluZy4gDQoNCmBgYHtyIGxpbmUgUExPVCBwcm9ncmVzcyBieSBhY3Rpdml0eX0NCmFjdF9saW5lcyA8LSBhY3RfYmVuMiAlPiUgDQogIG11dGF0ZShtZXNfc29sbyA9IGFzLkRhdGUobWVzX3NvbG8pKSAlPiUgDQogIGdyb3VwX2J5KGFjdGl2aWRhZF9zaG9ydCwgbWVzX3NvbG8pICU+JSANCiAgc3VtbWFyaXNlKGN1bXVsYXRpdmUgPSBzdW0oYmVuZWZpY2lhcmlvcykpICU+JSANCiAgbXV0YXRlKGN1bXVsYXRpdmUgPSByb3VuZChjdW1zdW0oY3VtdWxhdGl2ZSkpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IG1lc19zb2xvLCB5ID0gY3VtdWxhdGl2ZSwgY29sb3VyID0gYWN0aXZpZGFkX3Nob3J0KSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDAuNykgKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWItJVkiLCBkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gdW5pdF9mb3JtYXQodW5pdCA9ICJLIiwgc2NhbGUgPSAxZS0zLCBzZXAgPSAiIiksIA0KICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCA1MDAwMDApKSArDQogIHhsYWIoIiIpICsgeWxhYigiQmVuZWZpY2lhcmlvcyIpICsNCiAgc2NhbGVfY29sb3VyX2Rpc2NyZXRlKG5hbWUgPSAiQWN0aXZpZGFkIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpKSArDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKG5yb3cgPSAyLCBieXJvdyA9IFRSVUUpKQ0KDQpnZ3Bsb3RseShhY3RfbGluZXMsIHRvb2x0aXAgPSBjKCJ4IiwgInkiLCAiY29sb3VyIikpICU+JSANCiAgbGF5b3V0KHNob3dsZWdlbmQgPSBUUlVFLCBsZWdlbmQgPSBsaXN0KGZvbnQgPSBsaXN0KHNpemUgPSA2KSkpICU+JSANCiAgIGNvbmZpZyhkaXNwbGF5TW9kZUJhciA9IEZBTFNFKQ0KYGBgDQoNCiZuYnNwOw0KJm5ic3A7DQoNCg0KIyBTdW1tYXJpZXMgYnkgZ2VvZ3JhcGh5DQoNCiMjIEJlbmVmaWNpYXJpZXMgYnkgc3RhdGUNCg0KYGBge3IsIGVjaG89RkFMU0V9DQp1X2JlbjIgJT4lIA0KICBncm91cF9ieShlc3RhZG8pICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpb3MgPSBzdW0oYmVuZWZpY2lhcmlvcykpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBmY3RfcmVvcmRlcihlc3RhZG8sIGJlbmVmaWNpYXJpb3MsIC5kZXNjID0gVFJVRSksIA0KICAgICAgICAgICAgIHkgPSBiZW5lZmljaWFyaW9zKSkgKw0KICBnZW9tX2NvbChmaWxsID0gImNvcm5mbG93ZXJibHVlIikgKw0KICB5bGltKDAsIDg1MDAwMCkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpjb21tYShiZW5lZmljaWFyaW9zLCBhY2N1cmFjeSA9IDEpKSwgDQogICAgICAgICAgICB2anVzdCA9IC0wLjI1LCBoanVzdCA9IDAuMDUsIHNpemUgPSAzLCBhbmdsZSA9IDMwKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSB1bml0X2Zvcm1hdCh1bml0ID0gIksiLCBzY2FsZSA9IDFlLTMsIHNlcCA9ICIiKSwgDQogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDIwMDAwMCkpICsNCiAgeGxhYigiIikgKyB5bGFiKCJCZW5lZmljaWFyaW9zIikgKyANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCmBgYA0KDQombmJzcDsNCg0KYGBge3IgUkVGIGZvciB1YmljYWNpb24gdGV4dH0NCm1pcmFfenVsIDwtIHVfYmVuMiAlPiUgZmlsdGVyKGVzdGFkbyA9PSAiTUlSQU5EQSIgfCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFkbyA9PSAiWlVMSUEiKQ0KYGBgDQoNCiMjIE51bWJlciBvZiBTY2hvb2xzIGJ5IFN0YXRlDQo+IEEgdG90YWwgb2YgX19gciBmb3JtYXQobl9kaXN0aW5jdCh1X2JlbjIkdWJpY2FjaW9uKSwgYmlnLm1hcmsgPSAiLCIpYF9fIHNjaG9vbHMgaGF2ZSBiZWVuIHJlYWNoZWQgYnkgVU5JQ0VGOyBfX2ByIHJvdW5kKChuX2Rpc3RpbmN0KG1pcmFfenVsJHViaWNhY2lvbikpIC8gKG5fZGlzdGluY3QodV9iZW4yJHViaWNhY2lvbikpICogMTAwKWAlX18gYXJlIGZyb20gTWlyYW5kYSBhbmQgWnVsaWEgYWxvbmUuIA0KDQpgYGB7ciBQTE9UIG9mIHViaWNhY2lvbiBieSBzdGF0ZX0NCnVfYmVuMiAlPiUgDQogIGdyb3VwX2J5KGVzdGFkbykgJT4lIA0KICBkaXN0aW5jdCh1YmljYWNpb24pICU+JSANCiAgc3VtbWFyaXNlKHViaWNhY2lvbiA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBmY3RfcmVvcmRlcihlc3RhZG8sIHViaWNhY2lvbiwgLmRlc2MgPSBUUlVFKSwgeSA9IHViaWNhY2lvbikpICsNCiAgZ2VvbV9jb2woZmlsbCA9ICJjb3JuZmxvd2VyYmx1ZSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHJvdW5kKHViaWNhY2lvbikpLCB2anVzdCA9IC0wLjI1LCBzaXplID0gMykgKyANCiAgeGxhYigiIikgKyB5bGFiKCJOdW1lcm8gZGUgRXNjdWVsYXMiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQoNCmBgYA0KDQombmJzcDsNCg0KYGBge3IgUkVGIGZvciBhbGxfbXVufQ0KDQojIGFsbF9tdW4gaXMgb25lIG9icyBwZXIgcGNvZGUyDQphbGxfbXVuIDwtIHVfYmVuMiAlPiUgDQogIG11dGF0ZShpc19tYXRyaWMgPSBjYXNlX3doZW4oICMgZm9yIGJlbmVmaWNpYXJpZXMgYWdlZCAzLTE3DQogICAgICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwiM182JCIpIH4gIm1hdHJpYyIsDQogICAgICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwiN18xMiQiKSB+ICJtYXRyaWMiLA0KICAgICAgICBzdHJfZGV0ZWN0KGRlc2FncmVnYWNpb24sIjEyXzE3JCIpIH4gIm1hdHJpYyIsDQogICAgICAgIFRSVUUgfiAibm9uX21hdHJpYyIpKSAlPiUgDQogIG11dGF0ZShiZW5lZmljaWFyaW9zXzNfMTcgPSBpZmVsc2UoaXNfbWF0cmljID09ICJtYXRyaWMiLCBiZW5lZmljaWFyaW9zLCAwKSkgJT4lIA0KICBncm91cF9ieShlc3RhZG8sIG11bmljaXBpbywgcGNvZGUyKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaW9zID0gcm91bmQoc3VtKGJlbmVmaWNpYXJpb3MpKSwNCiAgICAgICAgICAgIGJlbmVmaWNpYXJpb3NfM18xNyA9IHJvdW5kKHN1bShiZW5lZmljaWFyaW9zXzNfMTcpKSkgJT4lDQogIHVuZ3JvdXAoKSAlPiUgDQogIGxlZnRfam9pbihhY3RfYmVuICU+JSAjIGJyaW5naW5nIGFjdGl2aXR5IGNvdW50cyBpbnRvIHVfYmVuDQogICAgICAgICAgICBncm91cF9ieShwY29kZTIpICU+JSANCiAgICAgICAgICAgIHN1bW1hcmlzZShhY3RfdHlwZXMgPSBuX2Rpc3RpbmN0KGFjdGl2aWRhZF9jb2RpZ28pKSkgJT4lIA0KICByaWdodF9qb2luKGNlbl9yZWYgJT4lICMgZm9yIGJyaW5naW5nIG1hdHJpY3VsYTIwMTcgaW50byBhbGxfbXVuDQogICAgICAgICAgICBwaXZvdF9sb25nZXIoY29scyA9IGMoIm1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9pbmljaWFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25fcHJpbWFyaWEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25fbWVkaWEiKSwgDQogICAgICAgICAgICAgICAgICAgICBuYW1lc190byA9ICJhZ2VfYmVuIiwgdmFsdWVzX3RvID0gIm1hdHJpY3VsYTIwMTciLCANCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlc19kcm9wX25hID0gVFJVRSkgJT4lIA0KICAgICAgICAgICAgc2VsZWN0KHBjb2RlMiwgYWdlX2JlbiwgbWF0cmljdWxhMjAxNykgJT4lIA0KICAgICAgICAgICAgZ3JvdXBfYnkocGNvZGUyKSAlPiUgDQogICAgICAgICAgICBzdW1tYXJpc2UobWF0cmljdWxhMjAxNyA9IHN1bShtYXRyaWN1bGEyMDE3KSkpICU+JSANCiAgbXV0YXRlKGNvdmVyYWdlX3BlcmNlbnQgPSByb3VuZChiZW5lZmljaWFyaW9zXzNfMTcgLyBtYXRyaWN1bGEyMDE3ICogMTAwKSkgJT4lIA0KICBtdXRhdGUoZXN0YWRvID0gZmN0X3Jlb3JkZXIoZXN0YWRvLCBiZW5lZmljaWFyaW9zLCAuZGVzYyA9IFRSVUUpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaW9zKSkNCg0KYGBgDQoNCiMjIFNjYXR0ZXJwbG90IG9mIE11bmljaXBhbGl0aWVzDQoqbG9nYXJpdGhtaWMgc2NhbGU7IGxhcmdlciBwb2ludHMgaW5kaWNhdGUgbW9yZSBiZW5lZmljaWFyaWVzIHJlYWNoZWQsIGRhcmtlciBibHVlcyBpbmRpY2F0ZSBtb3JlIGFjdGl2aXR5IHR5cGVzKiANCg0KKm1vdXNlIG92ZXIgbXVuaWNpcGFsaXRpZXMgdG8gc2VlIGJlbmVmaWNpYXJpZXMgYW5kIGRpc3RpbmN0IGFjdGl2aXRpZXMqDQoNCj4gQSB0b3RhbCBvZiBfX2ByIG5fZGlzdGluY3QodV9iZW4yJHBjb2RlMilgX18gbXVuaWNpcGFsaXRpZXMgd2VyZSByZWFjaGVkIGJ5IHRoZSBVTklDRUYgRWR1Y2F0aW9uIHByb2dyYW1tZS4NCg0KYGBge3Igc2NhdHRlclBMT1Qgb2YgbXVuaWNpcGFsaXRpZXMgYnkgc3RhdGV9DQoNCmFsbF9tdW5fcG9pbnRzIDwtIGFsbF9tdW4gJT4lIA0KICBnZ3Bsb3QoYWVzKHRleHQgPSBtdW5pY2lwaW8sIHggPSBlc3RhZG8sIHkgPSBiZW5lZmljaWFyaW9zLCANCiAgICAgICAgICAgICBjb2xvdXIgPSBhY3RfdHlwZXMpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBiZW5lZmljaWFyaW9zKSwgYWxwaGEgPSAwLjkpICsNCiAgc2NhbGVfY29sb3VyX2dyYWRpZW50KGxvdyA9ICJhenVyZTQiLCBoaWdoID0gImRhcmtibHVlIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMTAiLCANCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArDQogIHhsYWIoIiIpICsgeWxhYigiQmVuZWZpY2lhcmlvcyBBbGNhbnphZG9zIHBvciBNdW5pY2lwaW8iKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSANCg0KZ2dwbG90bHkoYWxsX211bl9wb2ludHMsIHRvb2x0aXAgPSBjKCJ0ZXh0IiwgInkiLCAiY29sb3VyIikpICU+JSANCiAgY29uZmlnKGRpc3BsYXlNb2RlQmFyID0gRkFMU0UpDQoNCmBgYA0KDQombmJzcDsNCg0KIyMgVG9wIDEwIG11bmljaXBhbGl0aWVzIGJ5IHJlYWNoIGFuZCBjb3ZlcmFnZQ0KDQpgYGB7ciBtdW5pY2lwYWxpdGllcyB0b3AgVEFCTEV9DQojIHRvcCBtdW5pY2lwYWxpdGllcyB0YWJsZQ0KdG9wX211biA8LSBhbGxfbXVuICU+JSBzZWxlY3QoZXN0YWRvLCBtdW5pY2lwaW8sIGJlbmVmaWNpYXJpb3MpICU+JSBzbGljZSgxOjEwKQ0KDQojIHRyeSB0byBtYWtlIGEgdGFibGUgb2YgdGhlIG1vc3Qgb3ZlcnN1YnNjcmliZWQgbXVuaWNpcGFsaXRpZXMNCnRvcF9jb3YgPC0gYWxsX211biAlPiUgYXJyYW5nZShkZXNjKGNvdmVyYWdlX3BlcmNlbnQpKSAlPiUgDQogIHNlbGVjdChlc3RhZG8sIG11bmljaXBpbywgY292ZXJhZ2VfcGVyY2VudCkgJT4lIHNsaWNlKDE6MTApDQoNCiMgdHdvIHRhYmxlcyBzaWRlIGJ5IHNpZGUNCmthYmxlKHRvcF9tdW4sIGNhcHRpb24gPSAiYnkgYmVuZWZpY2lhcmllcyIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gImJvcmRlcmVkIiwgZnVsbF93aWR0aCA9IEZBTFNFLCBwb3NpdGlvbiA9ICJmbG9hdF9sZWZ0IikNCmthYmxlKHRvcF9jb3YsIGNhcHRpb24gPSAiYnkgY292ZXJhZ2UiKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJib3JkZXJlZCIsIGZ1bGxfd2lkdGggPSBGQUxTRSwgcG9zaXRpb24gPSAibGVmdCIpIA0KDQojIHN1bSBvZiB0b3AgdGVuDQp0b3BfbXVuX3N1bSA8LSBhbGxfbXVuICU+JSANCiAgc2xpY2UoMToxMCkgJT4lIHN1bW1hcmlzZShzdW0gPSBzdW0oYmVuZWZpY2lhcmlvcywgbmEucm0gPSBUUlVFKSkNCg0KYWxsX211bl9zdW0gPC0gYWxsX211biAlPiUgDQogIHN1bW1hcmlzZShzdW0gPSBzdW0oYmVuZWZpY2lhcmlvcywgbmEucm0gPSBUUlVFKSkNCg0KYGBgDQoNCj4gVG9nZXRoZXIsIHRoZSAxMCBtdW5pY2lwYWxpdGllcyB3aXRoIHRoZSBoaWdoZXN0IHJlYWNoIChhYm92ZSBsZWZ0KSBmb3JtIF9fYHIgcm91bmQodG9wX211bl9zdW0gLyBhbGxfbXVuX3N1bSAqIDEwMClgJV9fIG9mIHRoZSBfX2ByIGZvcm1hdChzdW0oYWxsX211biRiZW5lZmljaWFyaW9zLCBuYS5ybSA9IFRSVUUpLCBiaWcubWFyayA9ICIsIilgX18gYmVuZWZpY2lhcmllcyByZWFjaGVkLiBUaGUgYXZlcmFnZSBjb3ZlcmFnZSBvZiB0aGUgc2Nob29sLWFnZSBwb3B1bGF0aW9uIGluIHRoZSBtdW5pY2lwYWxpdGllcyB3aGVyZSBVTklDRUYgaXMgcHJlc2VudCBpcyBfX2ByIHJvdW5kKG1lYW4oYWxsX211biRjb3ZlcmFnZV9wZXJjZW50LCBuYS5ybSA9IFRSVUUpKWAlX18uIENvdmVyYWdlIHJlZmVycyB0byB0aGUgcGVyY2VudGFnZSBvZiBlbnJvbGxlZCBjaGlsZHJlbiAoYWdlZCAzLTE3IHllYXJzKSByZWFjaGVkIGJ5IFVOSUNFRi4gDQoNCiZuYnNwOw0KDQojIyBIaXN0b2dyYW0gb2YgQ292ZXJhZ2UNCg0KPiBCZWxvdyBpcyBhIGhpc3RvZ3JhbSBvZiBtdW5jaWlwYWxpdGllcyB3aGVyZSBVTklDRUYgaXMgcHJlc2VudCBzaG93aW5nIHRoZSBjb3ZlcmFnZSBvZiBlbnJvbGxlZCBjaGlsZHJlbiAoYWdlZCAzLTE3KS4gT2Ygbm90ZSwgd2UgaGF2ZSByZWFjaGVkIDEwJSBvciBsZXNzIG9mIHRoZSBwb3B1bGF0aW9uIGluIF9fYHIgc3VtKGFsbF9tdW4kY292ZXJhZ2VfcGVyY2VudCA8PSAxMCwgbmEucm0gPSBUUlVFKWBfXyBvdXQgb2YgdGhlIF9fYHIgbl9kaXN0aW5jdCh1X2JlbjIkcGNvZGUyKWBfXyBpbiB3aGljaCB3ZSBvcGVyYXRlLiBUaGlzIGlzIGluIGFkZGl0aW9uIHRvIHRoZSBfX2ByIHN1bShpcy5uYShhbGxfbXVuJGNvdmVyYWdlX3BlcmNlbnQpKWBfXyB3aGVyZSBubyBVTklDRUYgRWR1Y2F0aW9uIGFjdGl2aXRpZXMgaGF2ZSBvY2N1cnJlZC4gDQoNCmBgYHtyIFBMT1QgaGlzdG9ncmFtIG9mIGNvdmVyYWdlfQ0KYWxsX211biAlPiUgDQogIGdncGxvdChhZXMoeCA9IGNvdmVyYWdlX3BlcmNlbnQpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gNSwgY29sb3VyID0gImJsYWNrIiwgZmlsbCA9ICJ3aGl0ZSIpICsNCiAgc3RhdF9iaW4oYmlud2lkdGggPSA1LCBnZW9tID0gInRleHQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4pLCB2anVzdCA9IC0wLjUpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMCwgMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCkpICsNCiAgeWxhYigiTnVtYmVyIG9mIG11bmljaXBhbGl0aWVzIikgKyB4bGFiKCJQZXJjZW50IG9mIGVucm9sbGVkIGNoaWxkcmVuICgzLTE3KSBjb3ZlcmVkIikNCg0KYGBgDQoNCiZuYnNwOw0KJm5ic3A7DQoNCiMgUmVwb3J0cyBhYm91dCBQYXJ0bmVycw0KDQojIyBTdW1tYXJ5IGJ5IFBhcnRuZXINCg0KYGBge3IgUExPVCBzdGFja2VkIGJhciBwYXJ0bmVyfQ0Kc3RhY2tfYXJyIDwtIGFjdF9iZW4yICU+JSANCiAgZ3JvdXBfYnkob3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZW5lZmljaWFyaW9zKSkgJT4lIA0KICBhcnJhbmdlKGRlc2ModG90YWwpKQ0KDQpvcmRfc29jIDwtIGMoIlVOSUNFRiIsICJTT0NJTyAxIiwgIlNPQ0lPIDIiLCAiU09DSU8gNCIsICJTT0NJTyA1IiwgIlNPQ0lPIDciLCAiU09DSU8gOCIsDQogICAgICAgICAgICAgIlNPQ0lPIDMiLCAiU09DSU8gMTAiLCAiU09DSU8gNiIpDQoNCnNvY19zdGFjayA8LSBhY3RfYmVuMiAlPiUgDQogIGdyb3VwX2J5KGFjdGl2aWRhZF9zaG9ydCwgb3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaW9zID0gcm91bmQoc3VtKGJlbmVmaWNpYXJpb3MpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSwgDQogICAgICAgICAgICAgeSA9IGJlbmVmaWNpYXJpb3MpKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gYWN0aXZpZGFkX3Nob3J0KSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gdW5pdF9mb3JtYXQodW5pdCA9ICJLIiwgc2NhbGUgPSAxZS0zLCBzZXAgPSAiIiksIA0KICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCA0MDAwMDApKSArDQogIHhsYWIoIiIpICsgeWxhYigiQmVuZWZpY2lhcmlvcyIpICsgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC4xLCAiY20iKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkgKw0KICBzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSAiQWN0aXZpZGFkIikgKw0KICBnZW9tX3RleHQoZGF0YSA9IHN0YWNrX2FyciwgYWVzKHkgPSB0b3RhbCArIDYwMDAsIGxhYmVsID0gc2NhbGVzOjpjb21tYSh0b3RhbCkpLCANCiAgICAgICAgICAgIHNpemUgPSAzKSArDQogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gb3JkX3NvYykNCg0KZ2dwbG90bHkoc29jX3N0YWNrLCB0b29sdGlwID0gYygieCIsICJmaWxsIiwgInkiKSkgJT4lIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICI8Yj4gb3JnYW5pemFjaW9uIDxiPiIpKSkgJT4lIA0KICBjb25maWcoZGlzcGxheU1vZGVCYXIgPSBGQUxTRSkgJT4lIA0KICBsYXlvdXQoc2hvd2xlZ2VuZCA9IFRSVUUsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IGxpc3Qoc2l6ZSA9IDYpKSkNCg0KDQpgYGANCg0KJm5ic3A7DQoNCiMjIE51bWJlciBvZiBkaWZmZXJlbnQgYWN0aXZpdGllcyBpbXBsZW1lbnRlZCBieSBlYWNoIHBhcnRuZXINCg0KYGBge3IgVEFCTEUgcGFydG5lciBhY3Rpdml0eSBjb3VudH0NCg0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCmFjdF9iZW4gJT4lIA0KICBtdXRhdGUob3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhID0gDQogICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOSUNFRiAtIEZvbmRvIGRlIGxhcyBOYWNpb25lcyBVbmlkYXMgcGFyYSBsYSBJbmZhbmNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5JQ0VGIikpICU+JSANCiAgcmVuYW1lKHBhcnRuZXIgPSBvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UobnVtX2FjdGl2aXRpZXMgPSBuX2Rpc3RpbmN0KGFjdGl2aWRhZF9jb2RpZ28pKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhudW1fYWN0aXZpdGllcykpICU+JSANCiAgdCgpICU+JSANCiAgcGFuZGVyKCkNCg0KYGBgDQoNCiZuYnNwOw0KDQojIyBQYXJ0bmVycycgcHJvZ3Jlc3Mgb3ZlciB0aW1lDQoqbW91c2Ugb3ZlciBmb3IgZGV0YWlscyoNCg0KYGBge3IgbGluZSBQTE9UIHBhcnRuZXJzIHByb2dyZXNzfQ0Kc29jX2xpbmUgPC0gYWN0X2JlbjIgJT4lIA0KICBtdXRhdGUobWVzX3NvbG8gPSBhcy5EYXRlKG1lc19zb2xvKSkgJT4lIA0KICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEsIG1lc19zb2xvKSAlPiUgDQogIHN1bW1hcmlzZShjdW11bGF0aXZlID0gcm91bmQoc3VtKGJlbmVmaWNpYXJpb3MpKSkgJT4lIA0KICBtdXRhdGUoY3VtdWxhdGl2ZSA9IGN1bXN1bShjdW11bGF0aXZlKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBtZXNfc29sbywgeSA9IGN1bXVsYXRpdmUsIGNvbG91ciA9IG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAwLjcpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViLSVZIiwgZGF0ZV9icmVha3MgPSAiMSBtb250aCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgc2VwID0gIiIpLCANCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMCwgNDEwMDAwKSkgKw0KICB4bGFiKCIiKSArIHlsYWIoIkJlbmVmaWNpYXJpb3MiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCmdncGxvdGx5KHNvY19saW5lLCB0b29sdGlwID0gYygieCIsICJ5IiwgImNvbG91ciIpKSAlPiUgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPiBvcmdhbml6YWNpb24gPGI+IikpKSAlPiUgDQogIGNvbmZpZyhkaXNwbGF5TW9kZUJhciA9IEZBTFNFKQ0KICANCmBgYA0KDQombmJzcDsNCg0KIyMgU3VtbWFyeSB0YWJsZSBhYm91dCBwYXJ0bmVycycgYWNoaWV2ZW1lbnRzDQoNCmBgYHtyIFRBQkxFIHBhcnRuZXJzIHN1bW1hcnl9DQphY3RfYmVuMiAlPiUgDQogIG11dGF0ZShzZXhfYmVuID0gaWZlbHNlKHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwgIl5tIiksICJtYWxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwgIl5mIiksICJmZW1hbGUiLCAibm9fZXNwIikpKSAlPiUgDQogIG11dGF0ZShhY3RpdmlkYWQgPSBhY3RpdmlkYWRfZGVzYykgJT4lIA0KICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgc3VtbWFyaXNlKG1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAibWFsZSJdKSksDQogICAgICAgICAgICBmZW1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAiZmVtYWxlIl0pKSwNCiAgICAgICAgICAgIHNleF9yYXRpbyA9IHJvdW5kKChtYWxlL2ZlbWFsZSksIGRpZ2l0cyA9IDIpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmlvcyA9IHN1bShiZW5lZmljaWFyaW9zLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwZXJjZW50X29mX3RvdGFsID0gcm91bmQoKGJlbmVmaWNpYXJpb3MgLyBzdW0oYmVuZWZpY2lhcmlvcykgKiAxMDApLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBsZWZ0X2pvaW4oYWN0X2JlbiAlPiUgDQogICAgICAgICAgICAgIG11dGF0ZShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEgPSANCiAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5JQ0VGIC0gRm9uZG8gZGUgbGFzIE5hY2lvbmVzIFVuaWRhcyBwYXJhIGxhIEluZmFuY2lhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklDRUYiKSkgJT4lIA0KICAgICAgICAgICAgICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG11bmljaXBhbGl0aWVzID0gbl9kaXN0aW5jdChwY29kZTIpKSwgDQogICAgIGJ5ID0gIm9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSIpICU+JSANCiAgcmVsb2NhdGUoYmVuZWZpY2lhcmlvcywgLmFmdGVyID0gb3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhKSAlPiUgDQogIHJlbG9jYXRlKHBlcmNlbnRfb2ZfdG90YWwsIC5hZnRlciA9IGJlbmVmaWNpYXJpb3MpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpb3MpKSAlPiUgDQogIHBhbmRlcihiaWcubWFyayA9ICIsIiwgc3R5bGUgPSAicm1hcmtkb3duIikNCmBgYA0KDQoNCiZuYnNwOw0KJm5ic3A7DQoNCiMgTWFwcyBhbmQgcmVmZXJlbmNlIHRhYmxlDQoNCiZuYnNwOw0KDQojIyBNYXBzIGF0IG11bmljaXBhbCBsZXZlbA0KYGBge3IgTUFQUyBtdW5pY2lwYWwgcmVhY2hlZCBhbmQgcGVyY2VudCByZWFjaGVkfQ0KIyBxdWlldCA9IFRSVUUgaXMgdmVyeSBpbXBvcnRhbnQgaGVyZQ0KcGNvZGUyX3NoYXBlIDwtIHN0X3JlYWQoIkM6L1VzZXJzL1NlYW4gTmcvRG9jdW1lbnRzL1IvNVcvdm56X2FkbTJfc2hhcGVmaWxlcy92ZW5fYWRtYm5kYV9hZG0yXzIwMTgwNTAyLnNocCIsIHF1aWV0ID0gVFJVRSkgJT4lIA0KICByZW5hbWUocGNvZGUxID0gQURNMV9QQ09ERSwNCiAgICAgICAgIHBjb2RlMiA9IEFETTJfUENPREUpDQoNCiMgSSB0aGluayBwbG90bHkncyBzZWxlY3RvciB0b29sIGlzIG5vdCB2ZXJ5IGdvb2QuIG9yIG1heWJlIHRoZSBjb29yZGluYXRlcw0KIyBvZiB0aGUgdmVuX2FkbWJuZGEgZGF0YXNldCBpcyBub3QgdmVyeSBnb29kLCBhdCBsZWFzdCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRyb2lkcy4gDQoNCm11bl9iZW5fcGxvdCA8LSBhbGxfbXVuICU+JSANCiAgcmlnaHRfam9pbihwY29kZTJfc2hhcGUpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdChhZXMoZmlsbCA9IGJlbmVmaWNpYXJpb3MpKSArDQogIGdlb21fc2Yoc2l6ZSA9IDAuMDEpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgZ2d0aXRsZSgiTnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCBieSBtdW5pY2lwYWxpdHkiKSArDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQodHJhbnMgPSB0cmFuc19yZXZlcnNlcigibG9nIiksIGJyZWFrcyA9IGMoMCwgMTAwLCAxMDAwLCAxMDAwMCwgODA0ODIpLA0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hLCBuYS52YWx1ZSA9ICJncmF5OTAiKSArDQogIHRoZW1lKGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC4zLCAiY20iKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gYygwLjksIDAuMSksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpKQ0KDQojIGZpeCB0aGlzIHRvIGNvbXBhcmUgc2Nob29saW5nIGFnZSBwb3B1bGF0aW9uDQoNCm11bl9wZXJjZW50X3Bsb3QgPC0gYWxsX211biAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUyX3NoYXBlKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lDQogIGdncGxvdChhZXMoZmlsbCA9IGNvdmVyYWdlX3BlcmNlbnQpKSsNCiAgZ2VvbV9zZihzaXplID0gMC4wMSkgKw0KICB0aGVtZV92b2lkKCkgKw0KICBnZ3RpdGxlKCJQZXJjZW50IG9mIGVucm9sbGVkIGNoaWxkcmVuICgzLTE3KSByZWFjaGVkIGJ5IG11bmljaXBhbGl0eSIpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsYWJlbHMgPSBjb21tYSwgdHJhbnMgPSAicmV2ZXJzZSIsIG5hLnZhbHVlID0gImdyYXk5MCIpKw0KICB0aGVtZShsZWdlbmQua2V5LnNpemUgPSB1bml0KDAuMywgImNtIiksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC45LCAwLjEpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksIA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMikpDQoNCiMgdXNpbmcgcGF0Y2h3b3JrIHRvIHB1dCB0aGVtIHNpZGUgYnkgc2lkZSANCg0KbXVuX2Jlbl9wbG90ICsgbXVuX3BlcmNlbnRfcGxvdCArIHBsb3RfbGF5b3V0KG5jb2wgPSAyKQ0KDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KIyMgUmVmZXJlbmNlIHRhYmxlIC0gbXVuaWNpcGFsIGxldmVsDQoNCl9fdXNlIGBVTklDRUZfcHJlc2VudGAgdG8gZmlsdGVyIHRvIG11bmljaXBhbGl0aWVzIHdoZXJlIHRoZSBFZHVjYXRpb24gcHJvZ3JhbW1lIG9wZXJhdGVzX18NCg0KKkNBMDEuMDUgUHJvbW9jaW9uIGRlIG1lbnNhamVzIGNsYXZlcyBwYXJhIGxhIGNvbXVuaWRhZCBlc2NvbGFyIGlzIG5vdCBpbmNsdWRlZCoNCg0KYGBge3IgRFQgZGF0YXRhYmxlfQ0KIyBpdCBzaG93cyAzMzUsIHNob3VsZG4ndCB0aGVyZSBiZSAzMzY/IEkgYmV0IGl0J3MgVmFyZ2FzIGFnYWluDQphbGxfbXVuICU+JSANCiAgbXV0YXRlKFVOSUNFRl9wcmVzZW50ID0gaWZlbHNlKGlzLm5hKGJlbmVmaWNpYXJpb3MpLCBGQUxTRSwgVFJVRSkpICU+JSANCiAgcmVuYW1lKG5vX29mX2FjdGl2aXRpZXMgPSBhY3RfdHlwZXMpICU+JSAjIEkgZmVlbCBsaWtlIHlvdSBzaG91bGQgaGF2ZSBkb25lIHRoaXMgZWFybGllcg0KICBsZWZ0X2pvaW4oY2VuX3JlZiAlPiUgIyBhZGRpdGlvbmFsIGNlbnN1cyB2YXJpYWJsZXMNCiAgICAgIGdyb3VwX2J5KHBjb2RlMikgJT4lIA0KICAgICAgc3VtbWFyaXNlKHBvb3JfcGVyc29ucyA9IHJvdW5kKHN1bShoYW1fMjAxOV94eF9wb2JsYWNpb25fcG9icmVfcG9yX3BhcnJvcXVpYSkpLA0KICAgICAgICAgICAgICAgIHRvdGFsX3BvcCAgICA9IHN1bSh4XzIwMTlfcG9ibGFjaW9uX3BhcnJvcXVpYWxfdG90YWwpKSAlPiUgDQogICAgICBtdXRhdGUocG92ZXJ0eV9pbmNpZGVuY2UgPSByb3VuZChwb29yX3BlcnNvbnMgLyB0b3RhbF9wb3AgKiAxMDApKSkgJT4lIA0KICBzZWxlY3QoIXBjb2RlMikgJT4lDQogIHJlbG9jYXRlKFVOSUNFRl9wcmVzZW50KSAlPiUgDQogIHJlbG9jYXRlKHBvdmVydHlfaW5jaWRlbmNlLCAuYWZ0ZXIgPSBjb3ZlcmFnZV9wZXJjZW50KSAlPiUgDQogIHJlbG9jYXRlKG5vX29mX2FjdGl2aXRpZXMsIC5hZnRlciA9IHBvdmVydHlfaW5jaWRlbmNlKSAlPiUNCiAgZGF0YXRhYmxlKGZpbHRlciA9ICJ0b3AiLCBvcHRpb25zID0gbGlzdChwYWdlTGVuZ3RoID0gMTAsIHNjcm9sbFggPSBUUlVFKSkNCiAgDQpgYGANCg0KDQo=